// let array = [1, [2, [3, 4]], 5, [6, 7]];

/*
* 递归 : 参数 和返回值 确定
* */
//
// function flatten(arr) {
//
//   let result = [];
//   for (let i = 0; i < arr.length; i++) {
//     //arr[i] 数组  递归
//     //不是数组 push result
//
//     if (Array.isArray(arr[i])) {
//       // result.push(...flatten(arr[i]));
//       result = result.concat(flatten(arr[i]));
//     } else {
//       result.push(arr[i]);
//     }
//   }
//   return result
// }
//
// //
// // console.log(flatten(array));
// //
// //
// // console.log(array.toString().split(',').map(item => Number(item)));
//
// function flatten2(arr) {
//   // reduce 第二个参数是初始值
//   return arr.reduce((prev, next) => {
//     // console.log(prev, next);
//     if (Array.isArray(next)) {
//       return [...prev, ...flatten2(next)]
//     } else {// next不是数组
//       return [...prev, next]
//     }
//   }, []);
// }
//
// console.log(flatten2(array));
//


let arr = [
  {
    id: 1,
    name: 'A', // 字体大小 14px  文字的宽度 : width 屏幕的宽度 clientWidth   x+2x+width = clientWidth // x = (clientWidth-width)/3
    parentId: 0,
    children: [ // + 1 + 1
      {
        id: 4,
        name: 'A1',
        parentId: 1, // 13px
        children: [
          {
            id: 6,
            name: 'A11',
            parentId: 4,
          }
        ]
      },
      {
        id: 5,
        name: 'A2',// 12px
        parentId: 1
      }
    ]
  },
  {
    id: 2,
    name: 'B', //12px
    parentId: 0 // 节点体积 0
  },
  {
    id: 3,
    name: 'C',
    parentId: 0
  }
];

let result = [

  {
    id: 1,
    name: 'A',
    parentId: 0
  },
  {
    id: 4,
    name: 'A1',
    parentId: 1,
  },
  {
    id: 6,
    name: 'A11',
    parentId: 4,
  },
  //...
];

function flatten4(arr) {
  let result = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i].children)) {
      result.push(...flatten4(arr[i].children));
      delete arr[i]['children'];
      result.unshift(arr[i]);
    } else {
      result.unshift(arr[i]);
    }
  }
  return result;
}

console.log(flatten4(arr));



// 给定一个数组，其中的元素均为树的根节点，要求渲染一个列表（优先选择使用React），
// 列表中的每一行为该数组的节点名，
// 其字体大小为12像素+节点体积，每一行文字到屏幕的左边距为文字到屏幕右边距的一半，
// 数组中所有树的每一个节点均需要在该列表中展示1行。
// 节点体积定义为其所有子节点的体积之和，如果一个节点为叶子节点，则其体积为1

